/*
 * Gespap2009App.java
 * Modif: Tom
 */

package gespap2009;

import java.util.ArrayList;
import java.util.List;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;

/**
 * The main class of the application.
 */
public class Gespap2009App extends SingleFrameApplication {

    /**
     * At startup create and show the main frame of the application.
     */
    @Override protected void startup() {
        show(new Gespap2009View(this));
    }

    /**
     * This method is to initialize the specified window by injecting resources.
     * Windows shown in our application come fully initialized from the GUI
     * builder, so this additional configuration is not needed.
     */
    @Override protected void configureWindow(java.awt.Window root) {
    }

    /**
     * A convenient static getter for the application instance.
     * @return the instance of Gespap2009App
     */
    public static Gespap2009App getApplication() {
        return Application.getInstance(Gespap2009App.class);
    }

    /**
     * Main method launching the application.
     */
    public static void main(String[] args) {
       /* launch(Gespap2009App.class, args);

        java.awt.EventQueue.invokeLater(new Runnable() {
           public void run() {
           //     new Ventana().setVisible(true);
                }
        });*/
        /*
         * Creación de controladores
         */
		ControladorVenta controladorVenta = 
                ControladorVenta.crearControladorVenta();
        ControladorClientes controladorClientes =
                ControladorClientes.crearControladorClientes();
        ControladorInstituciones controladorInstituciones =
                ControladorInstituciones.crearControladorInstituciones();
        /*
         * Fin de la creación de controladores
         */
        //inserta los datos iniciales
         insertarDatos(controladorVenta, controladorClientes, controladorInstituciones);
         /*
		 * Fin de los datos
		 */
          System.out.println("GESPAP 1.0");

        /*
		 * Ejemplos de crear clientes:
		 */
		controladorClientes.añadirClienteNuevo("Tomas Anton Escobar",
                "Calle melancolía 17", "616410001", "itantesco@gmail.com", "505050W"); // OK.
		controladorClientes.añadirClienteNuevo("Miguel Berlana Valladolid",
                "Calle Mayor 12", "625080808","mberlana@gmail.com", "505150W"); // OK.
		// Caso erroneo, tiene el mismo telefono.
       // controladorClientes.añadirCliente("Tomas Anton Escobar",
        //        "Calle melancolía 17", "616410001");
        // Erroneo, tiene el mismo telefono.
		//controladorClientes.añadirCliente("Miguel Berlana Valladolid", "" +
       //         "Avenida de los derechos humanos 10", "616410001");
	//	controladorClientes.añadirCliente("Giuliana Chuquipoma Angulo",
      //          "Calle Mayor 12", "614410601"); // Giuli vive con Miguel.



        /*Ejemplo de reservas */
        controladorClientes.obtenerArticulosReservados(
                controladorClientes.buscarClienteRegistrado("Tomas Anton Escobar"), "27-05-2009");
        controladorClientes.crearReserva(
        controladorClientes.buscarClienteRegistrado("Miguel Berlana Valladolid"), "27-05-2009");

        /*
         * ejemplo de crear instituciones y mostrar lista de libros
         */
       
      	List<Articulo> listaarticulo = new ArrayList<Articulo>();

        /*
         * muestra la lista de artículos de una determinada institución y curso
         */
		listaarticulo.addAll(
          controladorInstituciones.mostrarListaArticulos("Maria Auxiliadora", "4 ESO"));
          imprimirLista(listaarticulo);
          /*
           * Lista de articulos con cantidades
           */
          System.out.println("*******Articulos con cantidades******");
          List<Integer> cantidad = new ArrayList<Integer>();
          cantidad.add(2);
          cantidad.add(1);
          cantidad.add(3);
          cantidad.add(1);
          List<Articulo> listaAuxiliar = new ArrayList<Articulo>();

          listaAuxiliar.addAll(controladorClientes.InsertarNumeroArticulos(listaarticulo, cantidad));
          if(listaAuxiliar == null){

            System.out.println("Error: el número de artículos y cantidades no " +
                    "se corresponden");
          }else{

            imprimirLista(listaAuxiliar);
          }

          
        //lista de articulos seleccionados


        /*
         *Hacer un pedido para un cliente
         */
         controladorClientes.añadirClienteNuevo("Guliana chuquipoma", "los mares 32",
                 "90546732", "gchuquipoma@gmail.com","505053W");
         controladorClientes.añadirClienteNuevo("María del carmen Antón", "los callos 35",
                 "915932704", "maria@gmail.com", "505053M");
         Cliente cliente_temp =  new Cliente();
         cliente_temp = controladorClientes.buscarClienteRegistrado("Guliana chuquipoma");
         if(cliente_temp != null){
            controladorClientes.CrearPedido(listaarticulo, cliente_temp);
            controladorClientes.imprimirPedidos(cliente_temp);
         }else{
             cliente_temp = controladorClientes.buscarClienteRegistrado("505053W");
            if(cliente_temp!=null){
                controladorClientes.CrearPedido(listaarticulo, cliente_temp);
                controladorClientes.imprimirPedidos(cliente_temp);
            }
            else{
                 System.out.println("ERROR: el cliente no existe, usuario nuevo");
            }


         }
         
    }
    /*
     * Método de prueba que inserta de los datos iniciales de
     * instituciones, cursos y libros
     */
    @SuppressWarnings("static-access")
    private static void insertarDatos(ControladorVenta cv, ControladorClientes ccl,
            ControladorInstituciones ci) {
         //List listaInstitucion = new ArrayList<Institucion>();
        ci.añadirInstitucion("Facultad de Informática",
                "Campus de Montegancedo");
        ci.añadirInstitucion("Maria Auxiliadora", "donoso");
		Curso curso = new Curso("4 ESO");
		Curso curso2 = new Curso("2 ESO");
		Libro libro1 = new Libro(12.3,"matematicas","pepe",
								"los patos", 2008,3,"a1234");
		Libro libro2 = new Libro(13.5,"lenguaje y literatura","pepe",
				"los patos", 2008,3,"a1234");
		Libro libro3 = new Libro(14.5,"dibujo","pepe",
				"los patos", 2008,3,"a1234");
		Libro libro4 = new Libro(13.6,"biologia","pepe",
				"los patos", 2008,3,"a1234");
        //ControladorVenta.instituciones.add(institucion);
        //para la institución el curso =curso
        ci.instituciones.get(1).getCursos().add(curso);
		curso.getArticulos().add(libro1);
		curso.getArticulos().add(libro2);
		curso.getArticulos().add(libro3);
		curso.getArticulos().add(libro4);
		//libros del curso = curso

		//para la institución el curso =curso2
		ci.instituciones.get(0).getCursos().add(curso2);
		curso2.getArticulos().add(libro1);
		curso2.getArticulos().add(libro2);
		curso2.getArticulos().add(libro3);
		curso2.getArticulos().add(libro4);

    }

    /*
     * Método que imprime la lista de articulos pedidos
     */

	private static void imprimirLista(List<Articulo> listaarticulo) {

		for(int i = 0; i< listaarticulo.size(); i++){
			listaarticulo.get(i).imprimir();

		}

	}

}
